<?php

namespace app\logic;

class Page
{
    private static $obj = null;

    /**
     * 类入口
     * @return Page|null
     */
    public static function getInstance()
    {
        if (is_null(self::$obj))
            self::$obj = new self();
        return self::$obj;
    }

    /**
     * 获取列表信息
     * @param object $obj 对象
     * @param string|array $arr_where 查询条件
     * @param string $str_field 需要获取的参数
     * @param int $int_now_page 当前页码
     * @param int $int_list_rows 一页条数
     * @param string|null $str_sort 排序
     * @return array
     */
    public function getList($obj, $arr_where, $str_field, $int_now_page, $int_list_rows, $str_sort = null, $str_key = 'list')
    {
        _toValidate('id', $int_now_page, 10005);

        _toValidate('id', $int_list_rows, 10006);

        $int_total_rows = $obj->toCount($arr_where);

        $int_total_pages = (int)ceil($int_total_rows / $int_list_rows);//总页数
        _toCompare(($int_now_page > $int_total_pages && $int_total_pages > 0), '===', true, 10007);
        $int_first_row = $int_list_rows * ($int_now_page - 1);//从第几条开始查询

        $arr_list = (array)$obj->toSelect($arr_where, $str_field, $int_first_row, $int_list_rows, $str_sort);
        return ['totalPages' => $int_total_pages, $str_key => $arr_list];
    }

    /**
     * 获取列表信息
     * @param object $obj 对象
     * @param string|array $arr_where 查询条件
     * @param string $str_field 需要获取的参数
     * @param int $int_now_page 当前页码
     * @param int $int_list_rows 一页条数
     * @param string|null $str_sort 排序
     * @return array
     */
    public function getListWhereOr($obj, $arr_where, $arr_where_or, $str_field, $int_now_page, $int_list_rows, $str_sort = null, $str_key = 'list')
    {
        _toValidate('id', $int_now_page, 10005);

        _toValidate('id', $int_list_rows, 10006);

        $int_total_rows = $obj->toCountWhereOr($arr_where, $arr_where_or);

        $int_total_pages = (int)ceil($int_total_rows / $int_list_rows);//总页数
        _toCompare(($int_now_page > $int_total_pages && $int_total_pages > 0), '===', true, 10007);
        $int_first_row = $int_list_rows * ($int_now_page - 1);//从第几条开始查询

        $arr_list = (array)$obj->toSelectWhereOr($arr_where, $arr_where_or, $str_field, $int_first_row, $int_list_rows, $str_sort);
        return ['totalPages' => $int_total_pages, $str_key => $arr_list];
    }
}
